# -*- coding: utf-8 -*-
# autores: 13730 e 5952
# data: 30 de Novembro de 2013
# obs.: Projecto de LP
#

import csv, xlrd, sqlite3
import matplotlib.pyplot as plt
import numpy as np
import wx

#abre o ficheiro de excel e selecciona a folha
fd = xlrd.open_workbook('cna131fresultados.xls')
folha = fd.sheet_by_index(0)


#escreve num ficheiro csv os valores do ficheiro excel
with open('comma.csv', 'wb') as f:
    c = csv.writer(f)  
    for r in range(3,(folha.nrows-2)):
        c.writerow([folha.cell_value(r,0).encode('utf8'),
                    folha.cell_value(r,1).encode('utf8'),
                    folha.cell_value(r,2).encode('utf8'),
                    folha.cell_value(r,3).encode('utf8'),
                    folha.cell_value(r,4).encode('utf8'),
                    folha.cell(r,5).value,
                    folha.cell(r,6).value,
                    folha.cell(r,7).value,
                    folha.cell(r,8).value])

                 
#efectua conexao a base de dados
conexao = sqlite3.connect('basedados.db')
conexao.text_factory = str
d = conexao.cursor()


#elimina tabela caso ja exista e cria uma nova
d.execute("DROP TABLE IF EXISTS resultados")
d.execute('''CREATE TABLE resultados
             (codigo_instituicao text, codigo_curso text, nome_inst text, nome_curso text, grau text, vagas_ini integer, colocados integer, ultimo_coloc real, vagas integer)''')


#le os dados do ficheiro csv e insere na base de dados
with open ('comma.csv','rb') as csvfile:
    leitor=csv.reader(csvfile)
    for linha in leitor:
        db=[linha[0],linha[1],linha[2],linha[3],linha[4],linha[5],linha[6],linha[7],linha[8]]
        d.execute('INSERT INTO resultados VALUES(?,?,?,?,?,?,?,?,?)', db)

conexao.commit()


#fecho da conexao
conexao.close()
               


#CODIGO DA INTERFACE GRAFICA 

class MainFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MainFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.label_1 = wx.StaticText(self, -1, u"Análise de Colocações do Ensino Superior\n(clique nos botões para visualizar os gráficos correspondentes)\n", style=wx.ALIGN_CENTRE)
        self.button_1 = wx.Button(self, -1, u"Alunos colocados por Instituição")
        self.panel_1 = wx.Panel(self, -1)
        self.button_4 = wx.Button(self, -1, "Alunos Colocados por Distrito")
        self.panel_2 = wx.Panel(self, -1)
        self.button_5 = wx.Button(self, -1, "Permilagem de Alunos por Distrito")
        self.panel_3 = wx.Panel(self, -1)
        self.button_6 = wx.Button(self, -1, u"Percentagem de Alunos em Relação a todos os Alunos Colocados")
        self.panel_4 = wx.Panel(self, -1)
        self.button_7 = wx.Button(self, -1, u"Numero de vagas por instituição")
        self.panel_5 = wx.Panel(self, -1)
        self.button_8 = wx.Button(self, -1, u"Número de vagas por distrito")
        self.panel_6 = wx.Panel(self, -1)
        self.exit_button = wx.Button(self, -1, "Sair")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.col_inst, self.button_1)
        self.Bind(wx.EVT_BUTTON, self.col_dist, self.button_4)
        self.Bind(wx.EVT_BUTTON, self.perm_dist, self.button_5)
        self.Bind(wx.EVT_BUTTON, self.perc_col, self.button_6)
        self.Bind(wx.EVT_BUTTON, self.vag_inst, self.button_7)
        self.Bind(wx.EVT_BUTTON, self.vag_dist, self.button_8)
        self.Bind(wx.EVT_BUTTON, self.exit_b, self.exit_button)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MainFrame.__set_properties
        self.SetTitle("frame_1")
        self.SetSize((937, 506))
        self.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "Sans"))
        self.label_1.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.label_1.SetForegroundColour(wx.Colour(26, 117, 255))
        self.label_1.SetFont(wx.Font(17, wx.SCRIPT, wx.ITALIC, wx.BOLD, 0, ""))
        self.panel_1.SetMinSize((781, 5))
        self.panel_1.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.panel_2.SetMinSize((781, 8))
        self.panel_2.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.panel_3.SetMinSize((781, 8))
        self.panel_3.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.panel_4.SetMinSize((781, 8))
        self.panel_4.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.panel_5.SetMinSize((781, 8))
        self.panel_5.SetBackgroundColour(wx.Colour(255, 204, 74))
        self.button_8.SetMinSize((198, 30))
        self.panel_6.SetBackgroundColour(wx.Colour(255, 204, 74))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MainFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.button_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.panel_1, 1, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.button_4, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)
        sizer_1.Add(self.button_5, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.panel_3, 1, wx.EXPAND, 0)
        sizer_1.Add(self.button_6, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.panel_4, 1, wx.EXPAND, 0)
        sizer_1.Add(self.button_7, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.panel_5, 1, wx.EXPAND, 0)
        sizer_1.Add(self.button_8, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
        sizer_1.Add(self.panel_6, 1, wx.EXPAND, 0)
        sizer_1.Add(self.exit_button, 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_HORIZONTAL, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        # end wxGlade


#BOTOES E RESPECTIVO CODIGO COM A OBTENCAO DAS ESTATISTICAS E CRIACAO DOS GRAFICOS


        
    def col_inst(self, event):  # wxGlade: MainFrame.<event_handler>
        print "Alunos colocados por instituiçao"
        #numero de alunos colocados por instituicao 
        #criacao de csv para guardar as estatisticas
        #conexao a base de dados para obtençao das estatisticas       
        new_con = sqlite3.connect('basedados.db')
        new_con.text_factory = str
        m = new_con.cursor()


        with open('alunos_inst.csv', 'wb') as csvfile:
            escritor = csv.writer(csvfile)

            #devolve o codigo, o nome da instituicao e o total de alunos colocados na mesma
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total FROM resultados GROUP BY codigo_instituicao,nome_inst'):
                escritor.writerow([row[1],row[2]])
   
            #gráfico correspodente:



            #leitor do ficheiro csv com as estatisticas
        leitor = csv.reader(open('alunos_inst.csv'), delimiter=',')


            #criacao do grafico
        coloc=[]
        num=[]
        inst=[]
        a=1

            #obtem os valores do grafico e insere nas listas definidas acima
        for row in leitor:
            num.append(a)
            inst.append(row[0])
            coloc.append(float(row[1]))
            a=a+1


        lista=[i.decode('UTF-8') if isinstance(i, basestring) else i for i in inst]

#define as caracteristicas do grafico
        x = np.array(num)
        y = np.array(coloc)
        my_xticks = lista
        plt.xticks(x, my_xticks)
        plt.plot(x, y)
        plt.setp(plt.xticks()[1], rotation=90)
        plt.bar(x, y)
        plt.tick_params(axis='both', which='major', labelsize=5)
        plt.tick_params(axis='both', which='minor', labelsize=2)
        plt.plot(num, coloc, marker='o', linestyle='--', color='r')
        plt.title(u'Alunos Colocados por Instituição')
        for x, y in zip(x, y):
            plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
        plt.show()

        event.Skip()    


    def col_dist(self, event):  # wxGlade: MainFrame.<event_handler>
        print "Alunos colocados por distrito"
        new_con = sqlite3.connect('basedados.db')
        new_con.text_factory = str
        m = new_con.cursor()

        #numero de alunos colocados por distrito

        #criacao de csv para guardar as estatisticas
        with open('alunos_distrito.csv', 'wb') as csvfile:
            escritor = csv.writer(csvfile)  
             

        #selects que devolvem os alunos por distrito:
           
        #lisboa
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%estoril%" OR nome_inst LIKE "%infante%" OR nome_inst LIKE "%lisboa%"'):
                escritor.writerow(["Lisboa",row[2]])

        #porto
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Porto%"'):
                 escritor.writerow(["Porto",row[2]])

        #setubal  
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Setúbal%"'):
                escritor.writerow(["Setúbal",row[2]])

        #braga
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Universidade do Minho%" OR nome_inst LIKE "%Politécnico do Cávado e do Ave%"'):
                escritor.writerow(["Braga",row[2]])
             
        #aveiro
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Aveiro%"'):
                escritor.writerow(["Aveiro",row[2]])

        #leiria
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%leiria%"'):
                escritor.writerow(["Leiria",row[2]])

        #santarem
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Tomar%"'):
                escritor.writerow(["Santarém",row[2]])

        #faro
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Algarve%"'):
                escritor.writerow(["Faro",row[2]])

        #coimbra
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Coimbra%"'):
                escritor.writerow(["Coimbra",row[2]])

        #viseu
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Viseu%"'):
                escritor.writerow(["Viseu",row[2]])

        #madeira
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Madeira%"'):
                escritor.writerow(["Madeira",row[2]])

        #acores
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Açores%"'):
                escritor.writerow(["Açores",row[2]])

        #viana do castelo
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Viana do Castelo%"'):
                escritor.writerow(["Viana do Castelo",row[2]])

        #vila real
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Douro%"'):
                escritor.writerow(["Vila Real",row[2]])

        #castelo branco
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Politécnico de Castelo Branco%" OR nome_inst LIKE "%Beira Interior%"'):
                escritor.writerow(["Castelo Branco",row[2]])

        #evora
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Évora%"'):
                escritor.writerow(["Évora",row[2]])

        #guarda
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Guarda%"'):
                escritor.writerow(["Guarda",row[2]])

        #beja
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Beja%"'):
                escritor.writerow(["Beja",row[2]])

        #braganca
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Bragança%"'):
                escritor.writerow(["Bragança",row[2]])

        #portalegre
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Portalegre%"'):
                escritor.writerow(["Portalegre",row[2]])


                #grafico alunos por distrito


        #leitor do ficheiro csv com as estatisticas
        leitor = csv.reader(open('alunos_distrito.csv'), delimiter=',')


        #criacao do grafico
        coloc=[]
        num=[]
        dist=[]
        a=1

        #obtem os valores do grafico e insere nas listas definidas acima
        for row in leitor:
            num.append(a)
            dist.append(row[0])
            coloc.append(float(row[1]))
            a=a+1


        lista=[i.decode('UTF-8') if isinstance(i, basestring) else i for i in dist]

        #define as caracteristicas do grafico
        x = np.array(num)
        y = np.array(coloc)
        my_xticks = lista
        plt.xticks(x, my_xticks)
        plt.plot(x, y)
        plt.setp(plt.xticks()[1], rotation=90)
        plt.tight_layout()
        plt.bar(num, coloc)
        plt.plot(num, coloc, marker='o', linestyle='--', color='r')
        plt.title('Alunos por Distrito')
        for x, y in zip(x, y):
            plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
        plt.show()
        event.Skip()


    def perm_dist(self, event):  # wxGlade: MainFrame.<event_handler>
        print "Permilagem de alunos colocados por distrito"
        new_con = sqlite3.connect('basedados.db')
        new_con.text_factory = str
        m = new_con.cursor()



        #permilagem de alunos colocados por distrito

        total_alunos=0

        def permilagem(part, whole):
          return 1000 * float(part)/float(whole)


        for row in m.execute('SELECT SUM(colocados) as Total FROM resultados'):
                total_alunos=row[0]

        #criacao de csv para guardar as estatisticas
        with open('alunos_permi.csv', 'wb') as csvfile:
            escritor = csv.writer(csvfile)  
             

        #selects que devolvem os alunos por distrito:
           
        #lisboa
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%estoril%" OR nome_inst LIKE "%infante%" OR nome_inst LIKE "%lisboa%"'):
                escritor.writerow(["Lisboa",permilagem(row[2],total_alunos)])

        #porto
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Porto%"'):
                 escritor.writerow(["Porto",permilagem(row[2],total_alunos)])

        #setubal  
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Setúbal%"'):
                escritor.writerow(["Setúbal",permilagem(row[2],total_alunos)])

        #braga
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Universidade do Minho%" OR nome_inst LIKE "%Politécnico do Cávado e do Ave%"'):
                escritor.writerow(["Braga",permilagem(row[2],total_alunos)])
             
        #aveiro
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Aveiro%"'):
                escritor.writerow(["Aveiro",permilagem(row[2],total_alunos)])

        #leiria
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%leiria%"'):
                escritor.writerow(["Leiria",permilagem(row[2],total_alunos)])

        #santarem
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Tomar%"'):
                escritor.writerow(["Santarém",permilagem(row[2],total_alunos)])

        #faro
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Algarve%"'):
                escritor.writerow(["Faro",permilagem(row[2],total_alunos)])

        #coimbra
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Coimbra%"'):
                escritor.writerow(["Coimbra",permilagem(row[2],total_alunos)])

        #viseu
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Viseu%"'):
                escritor.writerow(["Viseu",permilagem(row[2],total_alunos)])

        #madeira
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Madeira%"'):
                escritor.writerow(["Madeira",permilagem(row[2],total_alunos)])

        #acores
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Açores%"'):
                escritor.writerow(["Açores",permilagem(row[2],total_alunos)])

        #viana do castelo
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Viana do Castelo%"'):
                escritor.writerow(["Viana do Castelo",permilagem(row[2],total_alunos)])

        #vila real
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Douro%"'):
                escritor.writerow(["Vila Real",permilagem(row[2],total_alunos)])

        #castelo branco
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Politécnico de Castelo Branco%" OR nome_inst LIKE "%Beira Interior%"'):
                escritor.writerow(["Castelo Branco",permilagem(row[2],total_alunos)])

        #evora
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Évora%"'):
                escritor.writerow(["Évora",permilagem(row[2],total_alunos)])

        #guarda
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Guarda%"'):
                escritor.writerow(["Guarda",permilagem(row[2],total_alunos)])

        #beja
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Beja%"'):
                escritor.writerow(["Beja",permilagem(row[2],total_alunos)])

        #braganca
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Bragança%"'):
                escritor.writerow(["Bragança",permilagem(row[2],total_alunos)])

        #portalegre
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total  FROM resultados WHERE nome_inst LIKE "%Portalegre%"'):
                escritor.writerow(["Portalegre",permilagem(row[2],total_alunos)])


                #grafico colocados por distrito


        #leitor do ficheiro csv com as estatisticas
        leitor = csv.reader(open('alunos_permi.csv'), delimiter=',')


        #criacao do grafico
        coloc=[]
        num=[]
        dist=[]
        a=1

        #obtem os valores do grafico e insere nas listas definidas acima
        for row in leitor:
            num.append(a)
            dist.append(row[0])
            coloc.append(float(row[1]))
            a=a+1


        lista=[i.decode('UTF-8') if isinstance(i, basestring) else i for i in dist]

        #define as caracteristicas do grafico
        x = np.array(num)
        y = np.array(coloc)
        my_xticks = lista
        plt.xticks(x, my_xticks)
        plt.plot(x, y)
        plt.setp(plt.xticks()[1], rotation=90)
        plt.tight_layout()
        plt.bar(num, coloc)
        plt.plot(num, coloc, marker='o', linestyle='--', color='r')
        plt.title('Colocados por Distrito(Permilagem')
        for x, y in zip(x, y):
            plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
        plt.show()

        event.Skip()


    def perc_col(self, event):  # wxGlade: MainFrame.<event_handler>
        print "percentagem de alunos colocados"
        new_con = sqlite3.connect('basedados.db')
        new_con.text_factory = str
        m = new_con.cursor()



        #a percentagem de alunos colocados por instituição em relação a todos os alunos colocados
        total_alunos=0

        def percentage(part, whole):
          return 100 * float(part)/float(whole)


        for row in m.execute('SELECT SUM(colocados) as Total FROM resultados'):
                total_alunos=row[0]

        with open('alunos_percent.csv', 'wb') as csvfile:
            escritor = csv.writer(csvfile)

            #devolve o codigo, o nome da instituicao e o total de alunos colocados na mesma
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(colocados) as Total FROM resultados GROUP BY codigo_instituicao,nome_inst'):
                 escritor.writerow([row[1],percentage(row[2],total_alunos)])
               

        #leitor do ficheiro csv com as estatisticas
        leitor = csv.reader(open('alunos_percent.csv'), delimiter=',')


        #criacao do grafico
        coloc=[]
        num=[]
        inst=[]
        a=1

        #obtem os valores do grafico e insere nas listas definidas acima
        for row in leitor:
            num.append(a)
            inst.append(row[0])
            coloc.append(float(row[1]))
            a=a+1


        lista=[i.decode('UTF-8') if isinstance(i, basestring) else i for i in inst]

        #define as caracteristicas do grafico
        x = np.array(num)
        y = np.array(coloc)
        my_xticks = lista
        plt.xticks(x, my_xticks)
        plt.plot(x, y)
        plt.setp(plt.xticks()[1], rotation=90)
        plt.bar(x, y)
        plt.tick_params(axis='both', which='major', labelsize=5)
        plt.tick_params(axis='both', which='minor', labelsize=2)
        plt.plot(num, coloc, marker='o', linestyle='--', color='r')
        plt.title(u'Alunos Colocados por Instituição(percentagem)')
        for x, y in zip(x, y):
            plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
        plt.show()

        event.Skip()


    def vag_inst(self, event):  # wxGlade: MainFrame.<event_handler>
        print "Vagas por instituicao"
        new_con = sqlite3.connect('basedados.db')
        new_con.text_factory = str
        m = new_con.cursor()


    #o número de vagas por colocar por instituição


        #criacao de csv para guardar as estatisticas
        with open('vagas_inst.csv', 'wb') as csvfile:
            escritor = csv.writer(csvfile)

            #devolve o codigo, o nome da instituicao e o total de alunos colocados na mesma
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total FROM resultados GROUP BY codigo_instituicao,nome_inst'):
                escritor.writerow([row[1],row[2]])
           
            #gráfico correspodente:



        #leitor do ficheiro csv com as estatisticas
        leitor = csv.reader(open('vagas_inst.csv'), delimiter=',')


        #criacao do grafico
        coloc=[]
        num=[]
        inst=[]
        a=1

        #obtem os valores do grafico e insere nas listas definidas acima
        for row in leitor:
            num.append(a)
            inst.append(row[0])
            coloc.append(float(row[1]))
            a=a+1


        lista=[i.decode('UTF-8') if isinstance(i, basestring) else i for i in inst]

        #define as caracteristicas do grafico
        x = np.array(num)
        y = np.array(coloc)
        my_xticks = lista
        plt.xticks(x, my_xticks)
        plt.plot(x, y)
        plt.setp(plt.xticks()[1], rotation=90)
        plt.bar(x, y)
        plt.tick_params(axis='both', which='major', labelsize=5)
        plt.tick_params(axis='both', which='minor', labelsize=2)
        plt.plot(num, coloc, marker='o', linestyle='--', color='r')
        plt.title(u'Vagas por Instituição')
        for x, y in zip(x, y):
            plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
        plt.show()

        event.Skip()



    def vag_dist(self, event):  # wxGlade: MainFrame.<event_handler>
        print "Vagas por distrito"
        new_con = sqlite3.connect('basedados.db')
        new_con.text_factory = str
        m = new_con.cursor()


        #número de vagas por distrito

        #criacao de csv para guardar as estatisticas
        with open('vagas_distrito.csv', 'wb') as csvfile:
            escritor = csv.writer(csvfile)  
             

        #selects que devolvem as vagas por distrito:
           
        #lisboa
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%estoril%" OR nome_inst LIKE "%infante%" OR nome_inst LIKE "%lisboa%"'):
                escritor.writerow(["Lisboa",row[2]])

        #porto
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Porto%"'):
                 escritor.writerow(["Porto",row[2]])

        #setubal  
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Setúbal%"'):
                escritor.writerow(["Setúbal",row[2]])

        #braga
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Universidade do Minho%" OR nome_inst LIKE "%Politécnico do Cávado e do Ave%"'):
                escritor.writerow(["Braga",row[2]])
             
        #aveiro
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Aveiro%"'):
                escritor.writerow(["Aveiro",row[2]])

        #leiria
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%leiria%"'):
                escritor.writerow(["Leiria",row[2]])

        #santarem
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Tomar%"'):
                escritor.writerow(["Santarém",row[2]])

        #faro
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Algarve%"'):
                escritor.writerow(["Faro",row[2]])

        #coimbra
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Coimbra%"'):
                escritor.writerow(["Coimbra",row[2]])

        #viseu
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Viseu%"'):
                escritor.writerow(["Viseu",row[2]])

        #madeira
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Madeira%"'):
                escritor.writerow(["Madeira",row[2]])

        #acores
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Açores%"'):
                escritor.writerow(["Açores",row[2]])

        #viana do castelo
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Viana do Castelo%"'):
                escritor.writerow(["Viana do Castelo",row[2]])

        #vila real
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Douro%"'):
                escritor.writerow(["Vila Real",row[2]])

        #castelo branco
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Politécnico de Castelo Branco%" OR nome_inst LIKE "%Beira Interior%"'):
                escritor.writerow(["Castelo Branco",row[2]])

        #evora
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Évora%"'):
                escritor.writerow(["Évora",row[2]])

        #guarda
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Guarda%"'):
                escritor.writerow(["Guarda",row[2]])

        #beja
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Beja%"'):
                escritor.writerow(["Beja",row[2]])

        #braganca
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Bragança%"'):
                escritor.writerow(["Bragança",row[2]])

        #portalegre
            for row in m.execute('SELECT codigo_instituicao,nome_inst,SUM(vagas) as Total  FROM resultados WHERE nome_inst LIKE "%Portalegre%"'):
                escritor.writerow(["Portalegre",row[2]])


                #grafico vagas por distrito


        #leitor do ficheiro csv com as estatisticas
        leitor = csv.reader(open('vagas_distrito.csv'), delimiter=',')


        #criacao do grafico
        coloc=[]
        num=[]
        dist=[]
        a=1

        #obtem os valores do grafico e insere nas listas definidas acima
        for row in leitor:
            num.append(a)
            dist.append(row[0])
            coloc.append(float(row[1]))
            a=a+1


        lista=[i.decode('UTF-8') if isinstance(i, basestring) else i for i in dist]

        #define as caracteristicas do grafico
        x = np.array(num)
        y = np.array(coloc)
        my_xticks = lista
        plt.xticks(x, my_xticks)
        plt.plot(x, y)
        plt.setp(plt.xticks()[1], rotation=90)
        plt.tight_layout()
        plt.bar(num, coloc)
        plt.plot(num, coloc, marker='o', linestyle='--', color='r')
        plt.title('Vagas por Distrito')
        for x, y in zip(x, y):
            plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
        plt.show()

        event.Skip()

    def exit_b(self, event):  # wxGlade: MainFrame.<event_handler>
        print "A encerrar o programa"
        event.Skip()
        self.Close(1)

# end of class MainFrame
if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MainFrame(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()


